<?php
class ActividadesController extends AppController {
    public $name = 'Actividades';
    public $appModule = 'Apafa';
    public $helpers = array('Html', 'Form', 'Number', 'Codigo','GetList');    
    public $components = array('Formating');

    public function index() {
        $q = $this->getBusqueda($this->data['Actividades']['busqueda']);
        $this->set('q', $q);
        $conditions['Actividade.empresa_id'] = $this->empresaId();
        $conditions['Actividade.activo'] = true;
        if (!empty($q))
            $conditions['OR'] = array(
                'Actividade.codigo SIMILAR TO'=>$q,
                'Actividade.descripcion SIMILAR TO'=>"%$q%" );
        $this->paginate['Actividade'] = array(
            'conditions'=>$conditions,
            'order'=>'codigo desc'
        );
        $data = $this->paginate('Actividade');
        $limite = $this->limite;
        $this->set(compact('data', 'limite'));
    }

    public function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Actividad invalido.', true));
            $this->redirect(array('action'=>'index'));
        }

        $this->set('data', $this->Actividade->find('first', array(
                                'conditions'=>array('Actividade.id'=>$id),
                                'recursive'=>-1  )));
    }

    public function add() {
        if (!empty($this->data)) {            
            $this->data['Actividade']['activo'] = true;
            $this->data['Actividade']['usuario_creacion_id'] = $this->usuarioId();
            $this->data['Actividade']['fecha_creacion'] = 'now()';

            $this->Actividade->create();
            if ($this->Actividade->save($this->data)) {
                $this->data['ActividadDetalle'][0]['actividad_id'] = $this->Actividade->id;
                $this->Actividade->ActividadDetalle->create();
                $this->Actividade->ActividadDetalle->save($this->data['ActividadDetalle'][0]);
                $this->Session->setFlash(__('El Actividade ha sido guardado', true));
                $this->redirect(array('action'=>'index'));
            } else {
                $this->Session->setFlash(__('El Actividade no ha podido ser guardado. Intente nuevamente..', true));
            }
        } else {
            $this->data['Actividade']['codigo']     = $this->Actividade->generateCodigo();
            $this->data['Actividade']['empresa_id'] = $this->empresaId();
        }
    }

    public function edit($id = null) {
        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Actividade Invalido', true));
            $this->redirect(array('action'=>'index'));
        }
        if (!empty($this->data)) {
            $this->data['Actividade']['usuario_modificacion_id'] = $this->usuarioId();
            $this->data['Actividade']['fecha_modificacion'] = 'now()';
            if ($this->Actividade->save($this->data)) {
                $this->data['ActividadDetalle'][0]['actividad_id'] = $this->Actividade->id;
                $this->Actividade->ActividadDetalle->save($this->data['ActividadDetalle'][0]);
                $this->Session->setFlash(__('La actividad ha sido guardado', true));
                $this->redirect(array('action'=>'index'));
            } else {
                    $this->Session->setFlash(__('La actividad no ha podido ser guardado. Intente nuevamente.', true));
            }
        }
        if (empty($this->data)) {
            $this->Actividade->recursive = 0;
            $this->data = $this->Actividade->find('first', array(
                                'conditions'=>array('Actividade.id'=> $id),
                                'contain'=>array('ActividadDetalle')));
            //printDie($this->data);die;
        }
    }

    public function delete($id = null, $verbose = true) {
        if (!$id) {
            if ($verbose){
                $this->Session->setFlash(__('Id de actividad es invalido', true));
                $this->redirect(array('action'=>'index'));
            }
            else return false;
        }
        $this->Actividade->recursive = -1;
        $data = $this->Actividade->find('first', array('conditions'=>array('id'=>$id)));
        $data['Actividade']['activo'] = false;
        $data['Actividade']['usuario_borrado_id']=$this->usuarioId();
        $data['Actividade']['fecha_borrado']='now()';        

        if (!$this->Actividade->save($data) && !verbose)
                return false;
        if ($verbose){
            $this->Session->setFlash(__('Actividad '.$data['Actividade']['codigo'].' fue eliminado', true));
            $this->redirect(array('action'=>'index'));
        }
        else{ 
            return true;            
        }
    }

    public function process(){// procesa anulaciones y eliminaciones en bloque
        $op = isset($this->params['form']['delete'])?'eliminar':'anular';
        $flag = true;
        $i = 0;
        foreach($this->data as $item){
            if ($item['id']!='0'){
                if(isset($this->params['form']['delete'])){ // eliminar                    
                    $flag = $this->delete($item['Actividade']['id'], false);
                }
                if (!$flag){
                    $data = $this->Actividade->read(null, $item['Actividade']['id']);
                    $this->Session->setFlash(__("Se ha producido un error al $op el Actividade #".$data['Actividade']['codigo'], true));
                    break;
                }
            }
            $i++;
        }
        if ($flag && $i > 0){
            $this->Session->setFlash(__("El proceso de $op Actividades se ha realizado con exito.", true));
        }
        $this->redirect(array('action'=>'index'));
    }
    
    function buscar(){
        $conditions['Actividade.activo'] = true;
        if(!empty($this->data['Actividade']['q'])){
            $q = $this->data['Actividade']['q'];
        } elseif (!empty($this->params['url']['q'])){
            $q = $this->params['url']['q'];
        } elseif (!empty($this->params['form']['q'])){
            $q = $this->params['form']['q'];
        }

        if(!empty($q)){
            if(strlen($q)==6 && is_numeric($q)){//si tiene 6 caracteres y es numerico, hace una busqueda exacta.
                $conditions = array(
                        'Actividade.activo'=>true,
                        'Actividade.empresa_id'=>$this->empresaId(),
                        'Actividade.codigo'=>$q,
                );
            }else{
                $conditions = array(
                        'Actividade.activo'=>true,
                        'Actividade.empresa_id'=>$this->empresaId(),
                        'OR'=>array(
                                'Actividade.codigo'=>$q,
                                'Actividade.descripcion Like' => '%'.strtoupper($q).'%'
                        )
                );
            }
        }
        $fields = array('Actividade.id','Actividade.codigo','Actividade.descripcion');
        $result = $this->Actividade->find('all', array(
                'conditions' => $conditions,
                'fields' => $fields,
                'order'=>array('Actividade.id'=>'asc'),
                'limit'=>100
        ));
        //definiendo valores en caso q sea una peticion para autocompletado
        if(!empty($this->params['url']['autocomplete']) || !empty($this->params['form']['autocomplete'])){
                $res = array();
                foreach($result as $value){
                        $res[] = array('value'=>$value['Actividade']['codigo'], 'display'=>'<span style="color:gray;font-size:.9em">'.$value['Actividade']['codigo'].'</span><div style="float:right;font-size:.8em" title="'.$value['Actividade']['descripcion'].'">'. $this->neat_trim($value['Actividade']['descripcion'], 24) .'</div>');
                }
                $result = $res;
        }
        if ($this->RequestHandler->isAjax()){
                if(empty($result)){
                        $result = array('error'=>'No se encontro resultados');
                }
                $this->_ajaxify($result);
        } else {
                return $result;
        }
    }
}
?>